/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */

package fr.generali.accueilclient.client.om.impl;

import fr.generali.accueilclient.client.om.IPersonne;

/**
 * Décorateur de la classe Personne.
 */
public class HistoPersonne extends AbstractPersonne {
    /**
     * Date de référence de l'objet personne
     */
    private Long date;

    /**
     * Personne objet à cacher
     */
    private IPersonne personne;

    /**
     * Constructor ayant en paramètres d'entrant l'objet personne à décorer.
     * 
     * @param date .
     * @param personne .
     */
    public HistoPersonne(Long date, IPersonne personne) {
        this.date = date;
        this.personne = personne;
    }

    @Override
    public int hashCode() {
        int hash = 11;
        if (this.getPersonne() != null && this.getDate() != null) {
            hash += this.getPersonne().getNumeroClient().hashCode() * this.getDate().hashCode();
        } else if (this.getPersonne() != null) {
            hash += this.getPersonne().getNumeroClient().hashCode();
        } else if (this.getDate() != null) {
            hash += this.getDate().hashCode();
        }
        return hash;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }

        if (o == null) {
            return false;
        }

        if (!(o instanceof HistoPersonne)) {
            return false;
        }

        HistoPersonne p = (HistoPersonne ) o;

        if ((p.getDate() != null && !p.getDate().equals(this.getDate()))
                        || (this.getDate() != null && !this.getDate().equals(p.getDate()))) {
            return false;
        }

        if ((p.getPersonne() != null && this.getPersonne() == null)
                        || (p.getPersonne() == null && this.getPersonne() != null)) {
            return false;
        }

        if (p.getPersonne() != null && this.getPersonne() != null) {
            if ((p.getPersonne().getNumeroClient() != null && !p.getPersonne().getNumeroClient().equals(
                            this.getPersonne().getNumeroClient()))
                            || (this.getPersonne().getNumeroClient() != null && !this.getPersonne().getNumeroClient()
                                            .equals(p.getPersonne().getNumeroClient()))) {
                return false;
            }
        }

        return true;
    }

    public Long getDate() {
        return date;
    }

    public void setDate(Long date) {
        this.date = date;
    }

    public IPersonne getPersonne() {
        return personne;
    }

    public void setPersonne(IPersonne personne) {
        this.personne = personne;
    }

    public String getDenominationCourte() {
        return this.personne != null ? this.personne.getDenominationCourte() : null;
    }

    public boolean isPersonnePhysique() {
        return this.personne != null ? this.personne.isPersonnePhysique() : false;
    }
}
